﻿using System;
using System.Configuration;
using System.Data;
using System.Runtime.Remoting.Messaging;
using MySql.Data.MySqlClient;

namespace OrionApplication.OrionLib.Orion
{
    public class OrionConfBase
    {
        /// <summary>
        /// Chaine de connexion à la base de données
        /// </summary>
        public static String MySQLConnexion = "server=" + ConfigurationManager.AppSettings["OrionServeur"] +
            ";user=" + ConfigurationManager.AppSettings["OrionBDUser"] +
            ";database=" + ConfigurationManager.AppSettings["OrionBD"] +
            ";port=3306;password=" + ConfigurationManager.AppSettings["OrionBDPassword"] +
            ";";

        /// <summary>
        /// Chaine de connexion à la base de données "*_1"
        /// </summary>
        public static String MySQLConnexion_1 = "server=" + ConfigurationManager.AppSettings["OrionServeur_1"] +
            ";user=" + ConfigurationManager.AppSettings["OrionBDUser_1"] +
            ";database=" + ConfigurationManager.AppSettings["OrionBD_1"] +
            ";port=3306;password=" + ConfigurationManager.AppSettings["OrionBDPassword_1"] +
            ";";

        #region Ensemble de constante pour l'application
        public const string OrionUserConnected = "OrionUserConnected";
        public const string OrionUserGroupConnected = "OrionGroupUserConnected";
        public const string OrionUserIsAdmin = "OrionUserIsAdmin";
        public const string OrionSql = "OrionSql";
        public const string OrionSql_1 = "OrionSql_1";
        public const string OrionModeInsert = "INSERT";
        public const string OrionModeMAJ = "MAJ";
        public const string DiNonCree = "DiNonCree";
        public const string DiGeneree = "DiGeneree";
        public const string BaseFormNameSpace = "OrionApplication.OrionForm";
        public const string DiDejaGeneree = "DiDejaGeneree";
        public const string AucuneLigneSelectionnee = "AucuneLigneSelectionnee";
        public const string ConfirmSuppression = "ConfirmSuppression";
        public const string ConfirmSuppressionIntervention = "ConfirmSuppressionIntervention";
        public const string ConfirmSuppressionApplication = "ConfirmSuppressionApplication";
        public const string ConfirmSuppressionMaterielAssociation = "ConfirmSuppressionMaterielAssociation";
        public const string ConfirmDuplique = "ConfirmDuplique";
        public const string ChampObligatoire = "ChampObligatoire";
        public const string UtilisateurInactif = "UtilisateurInactif";
        public const string ErreurConnexion = "ErreurConnexion";
        public const string ConfirmQuit = "ConfirmQuit";
        public const string ErreurMenuParam = "ErreurMenuParam";
        public const string ModeFormRequeteSQL = "REQUETESQL";
        #endregion

        /// <summary>
        /// Initialise la connexion à la base de données
        /// </summary>
        public static bool InitSql()
        {
            try
            {
                // Met en mémoire la connexion à la base de données
                CallContext.SetData(OrionConfBase.OrionSql, new MySqlConnection(OrionConfBase.MySQLConnexion));

                // Met en mémoire la connexion "_1" à la base de données
                CallContext.SetData(OrionConfBase.OrionSql_1, new MySqlConnection(OrionConfBase.MySQLConnexion_1));

                return true;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace,
                    "Erreur", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);

                return false;
            }
        }

        /// <summary>
        /// Initialise la connexion à la base de données
        /// </summary>
        public static bool InitSqlTest()
        {
            try
            {
                // Met en mémoire la connexion à la base de données
                CallContext.SetData(OrionConfBase.OrionSql, new MySqlConnection("server=127.0.0.1;user=root;database=orionbanque;port=3306;password=;"));
                return true;
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace,
                    "Erreur", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);

                return false;
            }
        }

        /// <summary>
        /// Accède à la connexion de la base de données
        /// </summary>
        /// <returns>MySqlConnection : Connexion ouverte à la base de données</returns>
        public static MySqlConnection GetConnexion()
        {
            // Récupération de la connexion à la base de données
            // Si elle elle est perdue, nous l'ouvrons
            if (((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql)) != null)
            {
                // Récupération de la connexion à la base de données
                // Si elle n'est pas ouverte, nous l'ouvrons
                if (((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql)).State != ConnectionState.Open)
                    ((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql)).Open();
            }
            else
                CallContext.SetData(OrionConfBase.OrionSql, new MySqlConnection(OrionConfBase.MySQLConnexion));
            return ((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql));
        }

        /// <summary>
        /// Accède à la connexion "_1" de la base de données
        /// </summary>
        /// <returns>MySqlConnection : Connexion ouverte à la base de données</returns>
        public static MySqlConnection GetConnexion_1()
        {
            // Récupération de la connexion à la base de données
            // Si elle elle est perdue, nous l'ouvrons
            if (((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql_1)) != null)
            {
                // Récupération de la connexion à la base de données
                // Si elle n'est pas ouverte, nous l'ouvrons
                if (((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql_1)).State != ConnectionState.Open)
                    ((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql_1)).Open();
            }
            else
                CallContext.SetData(OrionConfBase.OrionSql_1, new MySqlConnection(OrionConfBase.MySQLConnexion));
            return ((MySqlConnection)CallContext.GetData(OrionConfBase.OrionSql_1));
        }  
    }
}